#ifndef ZLBASE_PROTOCOL_CPROTOCOLFACTORY_H_
#define ZLBASE_PROTOCOL_CPROTOCOLFACTORY_H_

#include <memory>

#include "zlbase/global.h"

namespace zl
{
namespace zlbase
{
/// \brief 协议类工厂类
///
/// 所有的协议对象实例都应该由该工厂类创建，工厂类创建实例成功后会返回一个共享指针对象。该指针对象
/// 由CProtocolFactory管理，用户不应手动删除该对象。
/// 该工厂类是一个模板类，目前支持的实例为：
/// 开门板协议工厂类：template class CProtocolFactory<IDoorControlBoardProtocol>
/// 监控板协议工厂类：template class CProtocolFactory<IMonitorControlBoardProtocol>
/// 温控板协议工厂类：template class CProtocolFactory<ITemperatureControlBoardProtocol>
template <class T>
class ZLBASE_API CProtocolFactory
{
public:
    CProtocolFactory();
    ~CProtocolFactory();

    /// \brief 创建协议实例
    ///
    /// 该接口根据用户输入的协议类型创建一个对象的实例，若没有匹配的类型，返回一个空的指针。
    /// \param[in] uuid 协议类型
    /// \return 协议实例指针
    std::shared_ptr<T> Concreate(const char *uuid);
};

}  // namespace zlbase
}  // namespace zl

#endif  // ZLBASE_PROTOCOL_CPROTOCOLFACTORY_H_
